package com.gsit.orc.util;

import java.awt.*;
import java.awt.event.*;
import java.io.*;
import javax.swing.*;
import javax.media.*;

public class MediaPlayerDemo extends JFrame {
	private Player player;
	private File file;

	public MediaPlayerDemo() {
		super("Demonstrating the Java Media Player");
		startApp();
	}

	private void startApp() {
		JButton openFile = new JButton("Open file to play");
		openFile.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				openFile();
				createPlayer();
			}
		});
		getContentPane().add(openFile, BorderLayout.NORTH);

		setSize(300, 300);
		show();

	}

	private void openFile() {
		JFileChooser fileChooser = new JFileChooser();

		fileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
		int result = fileChooser.showOpenDialog(this);

		// user clicked Cancel button on dialog
		if (result == JFileChooser.CANCEL_OPTION)
			file = null;
		else
			file = fileChooser.getSelectedFile();
	}

	private void createPlayer() {
		if (file == null)
			return;

		removePreviousPlayer();

		try {
			// create a new player and add listener
			player = Manager.createPlayer(file.toURL());
			player.addControllerListener(new EventHandler());
			//player.start(); // start player
			
			
			
			while (true) {
				reStartPlayer();
				Thread.sleep(5000);
				
			}
			
			
		} catch (Exception e) {
			JOptionPane.showMessageDialog(this, "Invalid file or location",
					"Error loading file", JOptionPane.ERROR_MESSAGE);
		}
	}

	private void removePreviousPlayer() {
		if (player == null)
			return;

		player.close();

		Component visual = player.getVisualComponent();
		Component control = player.getControlPanelComponent();

		Container c = getContentPane();

		if (visual != null)
			c.remove(visual);

		if (control != null)
			c.remove(control);
	}
	
	
	private void reStartPlayer() {
		if (player == null)
			return;

		System.out.println("Controller.Started "+Controller.Started);
		System.out.println("player.getState() "+player.getState());
		
		if(Controller.Started == player.getState()){
			System.out.println("It is all ready tared .................................");
			return ;
		}
		
		player.start();

	}

	public static void main(String args[]) {
		MediaPlayerDemo app = new MediaPlayerDemo();

		app.addWindowListener(new WindowAdapter() {
			public void windowClosing(WindowEvent e) {
				System.exit(0);
			}
		});
	}

	// inner class to handler events from media player
	private class EventHandler implements ControllerListener {
		public void controllerUpdate(ControllerEvent e) {
			if (e instanceof RealizeCompleteEvent) {
				Container c = getContentPane();

				// load Visual and Control components if they exist
				Component visualComponent = player.getVisualComponent();

				if (visualComponent != null)
					c.add(visualComponent, BorderLayout.CENTER);

				Component controlsComponent = player.getControlPanelComponent();

				if (controlsComponent != null)
					c.add(controlsComponent, BorderLayout.SOUTH);

				c.doLayout();
			}
		}
	}
}
